"use strict"
const sendStat = require("../extend/helper").sendStat
module.exports = (option, app) => {
	const constant = app.config.constant
	/**
	 * 
	 * @param {import("egg").Context} ctx 
	 * @param {*} next 
	 */
	async function err(ctx, next) {
		try {
			await next()
		} catch (err) {

			// 所有的异常都在 app 上触发一个 error 事件，框架会记录一条错误日志
			const status = err.status || 500
			// 生产环境时 500 错误的详细错误内容不返回给客户端，因为可能包含敏感信息
			const error = status === 500 && app.config.env === "prod"
				? "Internal Server Error"
				: err.message
			// 从 error 对象上读出各个属性，设置到响应中
			ctx.body = {c: -1, error}
			if (status === 422) {
				ctx.logger.warn(JSON.stringify(ctx.query))
				ctx.logger.warn(JSON.stringify(ctx.request.body))

				ctx.body = sendStat(constant.ERROR_PARAM_UPLOAD_MISS, err.errors)
				ctx.logger.warn(JSON.stringify(ctx.body))
			}
			ctx.status = status

			if (status != 422) {// 记录错误
				try {
					ctx.logger.error(JSON.stringify(err) + "\n" + err.stack)
				} catch (error) {
					ctx.logger.error(err && err.message)
				}

			}
		}
	}
	return err
}